Taking from our last meeting in trying to "simulate a participant's experience" I analysed the ball's location across the simulation trace as a function of RT.
For each stimulus, the empirical RT distribution is collected, and each RT sample is converted into simulation ticks with a simple equation (RT * 60 / 1000). These converted RT samples are then mapped to the corresponding location of the ball at that time in the simulation, and plotted as a point.
for file in json_files:
# Get scene name
scene = file.split('.')[0]
# Set up figure
fig, axs = plt.subplots(1,4,figsize=(32,10))
# Ball trace
trace = pilot4.scene_trace(loaddir+file)
# Subset responses to the scene type
df = responses.loc[(responses.scene_type == scene) & responses.scene_col == True][['rt','subject_id','experiment_version','scene_index','response']]
# Convery RT into ticks
df['tick'] = df.rt.apply(lambda x: int(x * 60 / 1000) if x < scene_to_ms[scene] else len(trace)-1)
df['tick'] = df.tick.apply(lambda x: len(trace)-1 if x > len(trace)-1 else x)
# Index locations based on RT
df['x'] = df.tick.apply(lambda x: trace[x][0])
df.x = df.x.apply(lambda x: x*np.random.normal(1,0.01))
df['y'] = df.tick.apply(lambda x: trace[x][1])
# Plot ball location as a function of RT
g=sns.scatterplot(x="x",
y="y",
hue="experiment_version",
alpha=0.5,
data=df,
palette="tab10",
ax=axs[0])
g.set(ylim=(0, 1000),xlim=(0,800))
g.set_title("Locations of Ball as a function of RT")
g.invert_yaxis()
# Compute heatmap (2D histogram)
x = df.loc[df.experiment_version == 4].x
y = df.loc[df.experiment_version == 4].y
s = 16
img, extent = myplot(x, y, s)
axs[1].imshow(img, extent=extent, origin='lower', cmap=cm.jet)
axs[1].set_title("Smoothed 2D Histogram of RT data: Experiment 4")
axs[1].invert_yaxis()
# Compute heatmap (2D histogram)
x = df.loc[df.experiment_version == 5].x
y = df.loc[df.experiment_version == 5].y
s = 16
img, extent = myplot(x, y, s)
axs[2].imshow(img, extent=extent, origin='lower', cmap=cm.jet)
axs[2].set_title("Smoothed 2D Histogram of RT data: Experiment 5")
axs[2].invert_yaxis()
# Compute heatmap (2D histogram)
x = df.loc[df.experiment_version == 6].x
y = df.loc[df.experiment_version == 6].y
s = 16
img, extent = myplot(x, y, s)
axs[3].imshow(img, extent=extent, origin='lower', cmap=cm.jet)
axs[3].set_title("Smoothed 2D Histogram of RT data: Experiment 6")
axs[3].invert_yaxis()
plt.show()
hide_code_in_slideshow()
for file in json_files[:1]:
scene = file.split('.')[0]
for i in range(5):
fig, axs = plt.subplots(1,6,figsize=(48,10),dpi=300)
for j_idx,j in enumerate(range(i*3,i*3+3)):
# Ball trace
trace = pilot4.scene_trace(loaddir+file)
df = responses.loc[(responses.scene_type == scene)
& (responses.scene_col == 'yes')
& (responses.scene_index == j+0.0)
][
['rt',
'subject_id',
'experiment_version',
'scene_index',
'response']
]
df['tick'] = df.rt.apply(lambda x: int(x * 60 / 1000) if x < scene_to_ms[scene] else len(trace)-1)
df['tick'] = df.tick.apply(lambda x: len(trace)-1 if x > len(trace)-1 else x)
df['x'] = df.tick.apply(lambda x: trace[x][0])
df.x = df.x.apply(lambda x: x*np.random.normal(1,0.01))
df['y'] = df.tick.apply(lambda x: trace[x][1])
g=sns.scatterplot(x="x",
y="y",
hue="experiment_version",
alpha=0.5,
data=df,
palette="tab10",
ax=axs[j_idx*2])
g.set(ylim=(0, 1000),xlim=(0,800),title=f"Scene {scene.split('_')[1]} index {j}")
g.invert_yaxis()
# Generate some test data
x = df.x
y = df.y
s = 16
img, extent = myplot(x, y, s)
axs[j_idx*2+1].imshow(img, extent=extent, origin='lower', cmap=cm.jet)
axs[j_idx*2+1].set_title(f"Scene {scene.split('_')[1]} index {j}")
axs[j_idx*2+1].invert_yaxis()
plt.show()
for file in json_files[1:2]:
scene = file.split('.')[0]
for i in range(5):
fig, axs = plt.subplots(1,6,figsize=(48,10),dpi=300)
for j_idx,j in enumerate(range(i*3,i*3+3)):
# Ball trace
trace = pilot4.scene_trace(loaddir+file)
df = responses.loc[(responses.scene_type == scene)
& (responses.scene_col == 'yes')
& (responses.scene_index == j+0.0)
][
['rt',
'subject_id',
'experiment_version',
'scene_index',
'response']
]
df['tick'] = df.rt.apply(lambda x: int(x * 60 / 1000) if x < scene_to_ms[scene] else len(trace)-1)
df['tick'] = df.tick.apply(lambda x: len(trace)-1 if x > len(trace)-1 else x)
df['x'] = df.tick.apply(lambda x: trace[x][0])
df.x = df.x.apply(lambda x: x*np.random.normal(1,0.01))
df['y'] = df.tick.apply(lambda x: trace[x][1])
g=sns.scatterplot(x="x",
y="y",
hue="experiment_version",
alpha=0.5,
data=df,
palette="tab10",
ax=axs[j_idx*2])
g.set(ylim=(0, 1000),xlim=(0,800),title=f"Scene {scene.split('_')[1]} index {j}")
g.invert_yaxis()
# Generate some test data
x = df.x
y = df.y
s = 16
img, extent = myplot(x, y, s)
axs[j_idx*2+1].imshow(img, extent=extent, origin='lower', cmap=cm.jet)
axs[j_idx*2+1].set_title(f"Scene {scene.split('_')[1]} index {j}")
axs[j_idx*2+1].invert_yaxis()
plt.show()
for file in json_files[2:3]:
scene = file.split('.')[0]
for i in range(5):
fig, axs = plt.subplots(1,6,figsize=(48,10),dpi=300)
for j_idx,j in enumerate(range(i*3,i*3+3)):
# Ball trace
trace = pilot4.scene_trace(loaddir+file)
df = responses.loc[(responses.scene_type == scene)
& (responses.scene_col == 'yes')
& (responses.scene_index == j+0.0)
][
['rt',
'subject_id',
'experiment_version',
'scene_index',
'response']
]
df['tick'] = df.rt.apply(lambda x: int(x * 60 / 1000) if x < scene_to_ms[scene] else len(trace)-1)
df['tick'] = df.tick.apply(lambda x: len(trace)-1 if x > len(trace)-1 else x)
df['x'] = df.tick.apply(lambda x: trace[x][0])
df.x = df.x.apply(lambda x: x*np.random.normal(1,0.01))
df['y'] = df.tick.apply(lambda x: trace[x][1])
g=sns.scatterplot(x="x",
y="y",
hue="experiment_version",
alpha=0.5,
data=df,
palette="tab10",
ax=axs[j_idx*2])
g.set(ylim=(0, 1000),xlim=(0,800),title=f"Scene {scene.split('_')[1]} index {j}")
g.invert_yaxis()
# Generate some test data
x = df.x
y = df.y
s = 16
img, extent = myplot(x, y, s)
axs[j_idx*2+1].imshow(img, extent=extent, origin='lower', cmap=cm.jet)
axs[j_idx*2+1].set_title(f"Scene {scene.split('_')[1]} index {j}")
axs[j_idx*2+1].invert_yaxis()
plt.show()